10 REM --------- DISK MASTER --------- 15 REM 20 REM SINGLE VIC-1541 DISK 25 REM ON COMMODORE-64 SYSTEM 30 REM 35 REM ROBERT W. BAKER 40 REM 15 WINDSOR DR, ATCO, NJ 08004 45 REM 50 REM 55 REM REVISED BY: 60 REM 65 REM CARL F. MUSOLFF 70 REM 4805 S 550 WEST 75 REM COLUMBUS, IN 47201 80 REM 85 REM ------------------------------- 90 : 100 POKE56,127:POKE55,255:CLR:PRINT"[147]PLEASE WAIT . . .[146]":GOSUB3050 110 C$="":S$=C$:X=.:Y=. 120 CR$=CHR$(13):HC$=CHR$(147):RV$=CHR$(18):RF$=CHR$(146):CL$=CHR$(157) 150 GOSUB2140:DIMD$(230),X$(230) 160 PRINT" READING DIRECTORY CROSS REFERENCE" 170 OPEN15,8,15,"I0":GOSUB2220 180 OPEN5,8,5,"0:DISK DIR XREF,S,R" 190 INPUT#15,EN,EM$,ET,ES:IFEN=62THEN290 200 INPUT#5,X$(NX):SS=ST:GOSUB2220:NX=NX+1:IFSS=0THEN200 210 GOTO290 220 S$="":FORX=1TOY:GOSUB260:S$=S$+C$:NEXTX:RETURN 230 FORX=1TOY:GOSUB260:NEXTX:RETURN 240 V=.:GOSUB260:IFC$<>""THENV=ASC(C$) 250 RETURN 260 GET#5,C$ 270 SS=ST:INPUT#15,EN,EM$,ET,ES:IFEN=0THENRETURN 280 PRINTHC$;RV$;"DISK ERROR!":PRINT:GOTO2270 290 CLOSE4:CLOSE5:CX=.:GOSUB2140 300 PRINTSPC(5);"0 - DONE":PRINT 310 PRINTSPC(5);"1 - UPDATE MASTER DIRECTORY":PRINT 320 PRINTSPC(5);"2 - DELETE DISK ENTRY FROM MASTER":PRINT 330 PRINTSPC(5);"3 - DISPLAY SELECTED DIRECTORY":PRINT 340 PRINTSPC(5);"4 - FIND SPECIFIED FILE":PRINT 350 PRINTSPC(5);"5 - LIST DISK ID'S AND NAMES" 360 GOSUB2150:PRINT"ENTER DESIRED FUNCTION: "; 370 GOSUB2120:IFC$="0"THENPRINTHC$:GOTO2380 380 V=VAL(C$):IFV<1ORV>5THEN370 390 ONVGOTO400,1180,980,1690,1250 400 CLOSE15:CX=0:PRINTHC$;"INSERT DISK TO BE CATALOGED" 410 PRINT:PRINT"DEPRESS ANY KEY TO CONTINUE, ";RV$;"Q";RF$;" TO QUIT" 420 GOSUB2120:IFC$="Q"THENGOSUB2390:GOTO290 430 GOSUB2150:PRINT"OK":OPEN15,8,15,"IO":GOSUB270 440 OPEN5,8,5,"$0,S,R":GOSUB270 450 SYSMK:VF=PEEK(679):NB=PEEK(680)+PEEK(681)*256 460 DN$="":FORI=0TO15:DN$=DN$+CHR$(PEEK(682+I)):NEXTI 470 DI$="":FORI=0TO1:DI$=DI$+CHR$(PEEK(698+I)):NEXTI 500 GOSUB2160:IFC$="N"THEN970 510 IFNX=0THEN630 520 FORX=0TONX-1:C$=LEFT$(X$(X),2):IFDI$C$THENNEXTX:GOTO630 540 IFDN$=MID$(X$(X),3)THEN630 550 PRINTHC$;RV$;"*** WARNING ***";RF$;" THIS DISK ID: ";RV$;DI$;RF$ 560 PRINT:PRINT"DISK NAME: ";RV$;DN$ 570 PRINT:PRINT"IS ALREADY CATALOGED WITH A DIFFERENT" 580 PRINT:PRINT"DISK NAME: ";RV$;MID$(X$(X),3):GOSUB2150 590 PRINT"CATALOGING THIS DISK WILL DELETE THE" 600 PRINT:PRINT"PREVIOUS DATA!":GOSUB2150 610 PRINT"CATALOG THIS DISK";:GOSUB2190:IFC$="N"THEN970 620 PRINTHC$;"CATALOGING DISK WITH NEW DISK NAME" 630 GOSUB2150:PRINT"READING DIRECTORY ENTRIES ..." 635 FB=WS:W1=INT(WS/256):POKE254,W1:POKE253,WS-W1*256 640 SYSMJ:DF$=CHR$(PEEK(702))+CHR$(PEEK(703)) 650 IFVF=1THENDF$=" 1" 660 NF=.:IX=1:XF=PEEK(700):IFXF<1THEN850 670 F9=PEEK(FB):IFF9<129THEN840 680 F$=CHR$(F9):S$="":FORJ=1TO18:S$=S$+CHR$(PEEK(FB+J)):NEXTJ 710 IFNF=.THEN740 720 FORX=1TONF:IFLEFT$(S$,16).THENFORX=1TONF:PRINT#5,D$(X);CR$;:GOSUB270:NEXTX 970 CLOSE5:GOSUB2290:GOTO400 980 PRINTHC$;"TO DISPLAY DISK DIRECTORY":GOSUB1870:ONVGOTO290,980 990 OPEN5,8,5,S$+",S,R":GOSUB270:GOSUB2070:INPUT#5,DF$,NB:GOSUB270 1000 PRINT#4," ";RV$;"DISK NAME:";RF$;" ";DN$:PRINT#4 1010 PRINT#4,""SPC(4);RV$;"DISK ID:";RF$;" ";DI$;SPC(6) 1020 PRINT#4,RV$;"DISK FORMAT:"RF$;" "DF$:PRINT#4 1030 PRINT#4,RV$;"BLOCKS FREE:";RF$;" ";NB:PRINT#4 1040 PRINT#4,"---------------------------------------":PRINT#4 1050 NF=.:IFSS>.THEN1160 1055 W1=INT(WS/256):POKE254,W1:POKE253,WS-W1*256 1060 SYSMI:GOSUB260:FT=PEEK(WS):S$="":FORI=1TO16:S$=S$+CHR$(PEEK(WS+I)):NEXTI 1065 Z=PEEK(WS+17):V=PEEK(WS+18) 1070 PRINT#4,RIGHT$(" "+STR$(Z+(256*V)),4);" ";S$;" "; 1080 IFFT=129THENPRINT#4,"SEQ"; 1090 IFFT=130THENPRINT#4,"PGM"; 1100 IFFT=131THENPRINT#4,"USR"; 1110 IFFT=132THENPRINT#4,"REL"; 1120 PRINT#4:GETC$:IFC$<>""THENGOSUB2120 1130 IFC$="Q"THEN1170 1140 NF=NF+1:IFSS=.THEN1060 1150 PRINT#4:PRINT#4,RV$;"#FILES:";RF$;" ";NF 1160 IFPD=3THENGOSUB2150:GOSUB2110 1170 CLOSE4:CLOSE5:GOTO980 1180 PRINTHC$;"TO DELETE DISK FROM MASTER DIRECTORY" 1190 GOSUB1870:ONVGOTO1240,1180 1200 PRINT#15,"S"+S$ 1210 CX=.:FORX=0TONX-1:IFLEFT$(X$(X),2)=DI$THENCX=1 1220 IFCXTHENX$(X)=X$(X+1) 1230 NEXT:NX=NX-1:GOTO1180 1240 GOSUB2290:GOTO290 1250 IFNX=.THENGOSUB1880:GOTO290 1260 CLOSE4:GOSUB2140 1270 PRINTSPC(5);"0 - RETURN TO MAIN FUNCTION MENU":PRINT 1280 PRINTSPC(5);"1 - PRINT FULL ID USAGE CHART":PRINT 1290 PRINTSPC(5);"2 - QUICK LIST OF ID'S IN USE":PRINT 1300 PRINTSPC(5);"3 - LIST DISK ID'S & NAMES":PRINT 1310 PRINTSPC(5);"4 - LIST ";RV$;"MIN";RF$;" FREE BLOCKS PER DISK":PRINT 1320 PRINTSPC(5);"5 - LIST ";RV$;"MAX";RF$;" FREE BLOCKS PER DISK" 1330 GOSUB2150:PRINT"ENTER DESIRED FUNCTION: "; 1340 GOSUB2120:IFC$="0"THEN290 1350 V=VAL(C$):IFV<1ORV>5THEN1340 1360 PRINTC$:ONVGOTO1370,1550,1620,2450,2490 1370 OPEN4,4 1380 PRINT#4,""SPC(15);RV$;" D I S K I D U S A G E C H A R T " 1390 PRINT#4:PRINT#4," "; 1400 FORX=48TO90:IFX=58THENX=65 1410 PRINT#4," ";CHR$(X);:NEXTX:PRINT#4 1420 Z=.:FORX=48TO90:IFX=58THENX=65 1430 PRINT#4," [219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219][192][219]"; 1440 PRINT#4,"[192][219][192][219][192][219][192][219][192][219][192][179]" 1450 PRINT#4,CHR$(X); 1460 FORY=48TO90:IFY=58THENY=65 1470 PRINT#4,CHR$(221);:IFZ=NXTHEN1500 1480 C$=CHR$(X)+CHR$(Y):S$=LEFT$(X$(Z),2) 1490 IFS$=C$THENPRINT#4,CHR$(166);:Z=Z+1:GOTO1510 1500 PRINT#4," "; 1510 NEXT Y:PRINT#4,CHR$(221):GETC$:IFC$<>""THENGOSUB2120 1520 IFC$<>"Q"THENNEXTX 1530 PRINT#4," [177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][177]"; 1540 PRINT#4,"[192][177][192][177][192][177][192][177][192][177][192][189]":GOTO1260 1550 GOSUB2070:PRINT#4,""SPC(7);"DISK ID'S CURRENTLY IN USE" 1560 PRINT#4:PRINT#4 1570 V=12:IFPD=4THENV=25 1580 Z=.:FORX=0TONX-1:PRINT#4,LEFT$(X$(X),2);" "; 1590 Z=Z+1:IFZ=INT(Z/V)*VTHENPRINT#4 1600 NEXTX:PRINT#4:PRINT#4:IFZ<>INT(Z/V)*VTHENPRINT#4 1610 PRINT#4,Z;RV$;"DISKS IN MASTER DIRECTORY":GOTO1670 1620 GOSUB2070:PRINT#4,RV$;"ID ...DISK NAME....":PRINT#4 1630 FORX=0TONX-1:PRINT#4,LEFT$(X$(X),2);" ";MID$(X$(X),3) 1640 GETC$:IFC$<>""THENGOSUB2120 1650 IFC$="Q"THEN1260 1660 NEXTX 1670 IFPD=4THEN1260 1680 GOSUB2150:GOSUB2110:GOTO1260 1690 IFNX=.THENGOSUB1880:GOTO290 1700 CLOSE4:PRINTHC$;"TO FIND WHAT DISK(S) A FILE IS ON":PRINT 1710 PRINT"ENTER FILE NAME .";CL$;CL$;CL$;:INPUTF$:IFF$="."THEN290 1720 IFF$="*"THENPRINT:PRINT"RE-";:GOTO1710 1725 W1=INT(WS/256):POKE254,W1:POKE253,WS-256*W1 1730 S$=F$:GOSUB2040:V=Y:GOSUB2070:POKEMP,V+1 1735 F1$="0"+F$+"0":FORF1=2TOV+1:POKEWF+F1-1,ASC(MID$(F1$,F1,1)):NEXTF1 1740 PRINT#4,RV$;"...FILE NAME.... ID ...DISK NAME....":PRINT#4 1750 PRINT#4,S$:PRINT#4 1760 FORZ=0TONX-1:DI$=LEFT$(X$(Z),2):DN$=MID$(X$(Z),3) 1770 GOSUB2030:OPEN5,8,5,S$+",S,R":EF=15:GOSUB270:INPUT#5,DF$,NB:GOSUB270 1780 SYSML:P2=PEEK(2)+1:ONP2GOTO1810,1790,1810,1790 1790 S$="":FORI=1TO16:S$=S$+CHR$(PEEK(WS+I)):NEXTI 1800 PRINT#4,S$;" ";DI$;" ";DN$:REM <- 2 SPACES EA 1810 GETC$:IFC$<>""THENGOSUB2120 1820 IFC$="Q"THENCLOSE5:GOTO1700 1830 ONP2GOTO1840,1780,1840,1840 1840 CLOSE5:NEXTZ 1850 IFPD=3THENGOSUB2150:GOSUB2110 1860 GOTO1700 1870 V=3:IFNX>.THEN1890 1880 PRINTHC$;RV$;"NO ENTRIES";:V=1:GOTO2010 1890 PRINT:PRINT"ENTER DISK ID .";CL$;CL$;CL$;:INPUTDI$ 1900 DI$=LEFT$(DI$+" ",2):IFDI$=". "THEN1950 1910 FORX=0TONX-1:IFDI$<>LEFT$(X$(X),2)THENNEXTX:GOTO2000 1920 DN$=MID$(X$(X),3):DI$=LEFT$(X$(X),2) 1930 GOSUB2160:IFC$="N"THENV=2:RETURN 1940 GOTO2030 1950 PRINT:PRINT"ENTER DISK NAME .";CL$;CL$;CL$;:INPUTF$ 1960 IFF$="."THENV=1:RETURN 1970 GOSUB2040:FORX=0TONX-1:IFY=.THEN2020 1980 IFF$=MID$(X$(X),3,Y)THEN2020 1990 NEXTX 2000 PRINT:PRINTRV$;"NOT";:V=2 2010 PRINT" IN MASTER DIRECTORY!":GOSUB2150:GOTO2110 2020 DN$=MID$(X$(X),3):DI$=LEFT$(X$(X),2):GOSUB2160:IFC$="N"THEN1990 2030 S$="0:DIR."+DI$:RETURN 2040 F$=LEFT$(F$,16) 2050 IFRIGHT$(F$,1)="*"THENY=LEN(F$):F$=LEFT$(F$,Y):RETURN 2060 Y=16:F$=LEFT$(F$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16):RETURN 2070 GOSUB2150:PRINT"WANT PRINTED COPY";:GOSUB2190:GOSUB2150 2080 PD=3:IFC$="Y"THENPD=4 2090 OPEN4,PD:IFPD=3THENPRINTHC$; 2100 RETURN 2110 PRINT"DEPRESS ANY KEY TO CONTINUE" 2120 GETC$:IFC$=""THEN2120 2130 RETURN 2140 PRINTHC$;SPC(9);RV$;"D I S K M A S T E R" 2150 PRINT:PRINT"---------------------------------------":RETURN 2160 PRINTHC$;RV$;"DISK NAME:";RF$;" ";DN$:PRINT 2170 PRINT" ";RV$;"DISK ID:";RF$;" ";DI$:GOSUB2150 2180 PRINT"CORRECT DISK"; 2190 PRINT" (Y/N) ? "; 2200 GOSUB2120:IFC$<>"Y"ANDC$<>"N"THEN2200 2210 PRINTC$:RETURN 2220 INPUT#15,EN,EM$,ET,ES:IFEN=.THENRETURN 2230 PRINTHC$;RV$;"DISK ERROR";RF$;" WHILE "; 2240 IFCXTHENPRINT"WRITING NEW" 2250 IFCX=0THENPRINT"READING" 2260 PRINT:PRINT"DISK DIRECTORY CROSS REFERENCE FILE.":PRINT 2270 PRINTEN;EM$;ET;ES 2280 PRINT:PRINTRV$;"PROGRAM ABORTED!":GOTO2380 2290 IFCX=.THENRETURN 2300 GOSUB2150:PRINT"UPDATING DIRECTORY CROSS REFERENCE ...":PRINT 2310 IFNX=.THENPRINT#15,"S0:DISK DIR XREF":RETURN 2320 PRINT#15,"S0:DIR XREF.TEMP" 2330 OPEN5,8,5,"0:DIR XREF.TEMP,S,W":GOSUB2220 2340 FORX=0TONX-1:PRINT#5,X$(X);CR$;:GOSUB2220:NEXTX 2350 CLOSE5:PRINT#15,"S0:DISK DIR XREF" 2360 PRINT#15,"R0:DISK DIR XREF=0:DIR XREF.TEMP":GOSUB2220 2370 RETURN 2380 CLOSE4:CLOSE5:CLOSE15:END 2390 PRINTHC$; 2400 CLOSE15:PRINT"INSERT MASTER DISK":PRINT:GOSUB2110 2410 OPEN15,8,15,"I0":GOSUB270 2420 PRINT#15,"C0:DISK MASTER=0:DISK MASTER" 2430 INPUT#15,EN:IFEN=63THENRETURN 2440 PRINT:PRINTRV$;"INCORRECT DISK!":GOSUB2150:GOTO2400 2450 PRINTHC$;"ENTER MINIMUM NUMBER OF FREE BLOCKS" 2460 PRINT:PRINT"TO BE DISPLAYED 0";CL$;CL$;CL$;:INPUTS$: REM DEFAULT=0 2470 Y=VAL(S$):IFS$<>"0"ANDY=0THEN1260 2480 VF=.:GOTO2530 2490 PRINTHC$;"ENTER MAXIMUM NUMBER OF FREE BLOCKS" 2500 PRINT:PRINT"TO BE DISPLAYED 99";CL$;CL$;CL$;CL$;:INPUTS$ 2510 Y=VAL(S$):IFY=.THEN1260 2520 VF=1 2530 GOSUB2070:PRINT#4,RV$;"#BLKS FREE ID ...DISK NAME....":PRINT#4 2540 FORX=.TONX-1:DI$=LEFT$(X$(X),2):DN$=MID$(X$(X),3) 2550 OPEN5,8,5,"0:DIR."+DI$+",S,R":GOSUB270:INPUT#5,DF$,NB:GOSUB270:CLOSE5 2560 IF(VF=.)AND(NBY)THEN2590 2580 PRINT#4,RIGHT$(" "+STR$(NB),7);SPC(5);DI$;" ";DN$ 2590 GETC$:IFC$<>""THENGOSUB2120 2600 IFC$="Q"THEN1260 2610 NEXT:GOTO1670 3000 REM ML=START OF MACHINE LANGUAGE FILE SEARCH ROUTINE 3005 REM MP=ADDRESS OF LENGTH OF FILE TO BE SEARCHED FOR 3010 REM MK=START OF MACHINE LANGUAGE DISK IDENTIFICATION ROUTINE 3015 REM MJ=START OF MACHINE LANGUAGE DIRECTORY INPUT ROUTINE 3020 REM MI=START OF MACHINE LANGUAGE FILE LISTING ROUTINE 3025 REM WF=BUFFER FOR FILE NAME TO BE SEARCHED FOR 3030 REM WS=BUFFER FOR FILES READ FROM DISK DURING SEARCH/UPDATE 3050 ML=32768:I=0 3060 READA1:IFA1<0THEN3140 3070 POKEML+I,A1:IFA1=17THENMP=ML+I 3080 I=I+1:GOTO3060 3090 DATA169,0,133,2,162,5,32,198,255,165,2,208,60,160,0,32,207,255 3100 DATA145,253,32,183,255,41,64,240,4,169,2,133,2,200,192,20,208,235 3110 DATA56,160,1,177,251,201,63,240,6,209,253,144,28,208,214,200,177,251 3120 DATA201,42,240,13,201,63,240,4,209,253,208,199,200,192,17,208,237,169 3130 DATA1,5,2,133,2,32,204,255,96,-1 :REM SUM THRU 96 = 10888 3140 WF=33150:W1=INT(WF/256):POKE252,W1:POKE251,WF-256*W1 3150 WS=33200:W1=INT(WS/256):POKE254,W1:POKE253,WS-256*W1 3160 MK=32849:I=0 3170 READA1:IFA1<0THEN3300 3180 POKEMK+I,A1:I=I+1:GOTO3170 3190 DATA162,5,32,198,255,32,207,255,141,167,2,32,207,255 3200 DATA169,0,141,168,2,141,169,2,160,1,162,0,232,32,207,255 3210 DATA224,1,208,19,192,18,240,15,24,109,168,2,141,168,2,169,0 3220 DATA109,169,2,141,169,2,224,4,208,225,200,192,36,208,218 3230 DATA162,0,32,207,255,157,170,2,232,224,16,208,245 3240 DATA32,207,255,32,207,255,162,0,32,207,255,157,186,2 3250 DATA232,224,2,208,245,32,204,255,96,-1:REM SUM THRU 96 = 12995 3300 MJ=32947:I=0 3310 READA1:IFA1<0THEN3470 3320 POKEMJ+I,A1:I=I+1:GOTO3310 3330 DATA169,0,133,2,141,188,2,141,189,2,162,5,32 3340 DATA198,255,32,207,255,162,0,32,207,255,157,190 3350 DATA2,232,224,2,208,245,162,89,32,207,255,202 3360 DATA208,250,160,0,32,207,255,145,253 3370 DATA32,207,255,32,207,255,162,16,230,253,208,2 3380 DATA230,254,32,207,255 3390 DATA145,253,32,183,255,41,64,240,4,169,1,133 3400 DATA2,202,208,231,162,9,32,207,255,202,208,250 3410 DATA162,2,230,253,208,2,230,254 3420 DATA32,207,255,145,253,202,208,242,238 3430 DATA189,2,169,8,205,189,2,208,5,169,0,141,189,2 3440 DATA173,189,2,240,8,162,2,32,207,255,202,208,250,238,188 3450 DATA2,230,253,208,2,230,254,165,2,240,151 3460 DATA32,204,255,96,-1: REM SUM THRU 96 = 22092 3470 MI=33095:I=0 3480 READA1:IFA1<0THEN3500 3490 POKEMI+I,A1:I=I+1:GOTO3480 3500 RETURN 3510 DATA162,5,32,198,255,160,0,32,207,255,145,253,200,192,19,208,246 3520 DATA32,204,255,96,-1: REM SUM THRU 96 = 3156